home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm3.lha / SORGENTI8 / LEZIONE14-7a1.s / LEZIONE14-7a1.s
Text File  |  1995-10-23  |  3KB  |  98 lines

  1.  
  2. ; LEZIONE14-7a1.s      ** MODULARE IN AMPIEZZA UN'ARMONICA **
  3.  
  4.     SECTION    LEZIONExx1,CODE
  5.  
  6. Start:
  7.  
  8.     lea    modvol,a0
  9.     moveq    #0,d0
  10.     moveq    #65-1,d7
  11. .Lp1:    move.w    d0,(a0)+
  12.     addq.w    #1,d0
  13.     dbra    d7,.lp1
  14.     subq.w    #1,d0
  15. .Lp2:    move.w    d0,(a0)+
  16.     dbra    d0,.lp2
  17.  
  18. _LVODisable    EQU    -120
  19. _LVOEnable    EQU    -126
  20.  
  21.     move.l    4.w,a6
  22.     jsr    _LVODisable(a6)
  23.  
  24.     bset    #1,$bfe001        ;spegne il filtro passa-basso
  25.  
  26.     lea    $dff000,a6
  27.     move.w    $2(a6),d7        ;salva DMA dell'OS
  28.     move.w    $10(a6),d6        ;salva ADKCON dell'OS
  29.  
  30. Clock    equ    3546895
  31.  
  32. ;         . . : ; .
  33. ;       .::::::::::::.
  34. ;       ::::::::::::::
  35. ;       :`:__: :_:_ |:
  36. ;      _:|/__ \/ __\|:_
  37. ;     / \|/ o\__/ o\|/ \
  38. ;    | | ¬\__/ ¬\__/¬ | |
  39. ;    | | |(_/    \_)| | |
  40. ;     \_/__(______)__\_/
  41. ;       (____________)
  42. ;       _\    sc    /_
  43. ;       _|\________/|_
  44. ;       .|..  ..  ..|_
  45. ;        /\__/..\__/\
  46. ;         /|.\__/ |\
  47. ;             ||
  48.  
  49.     move.l    #armonica,$b0(a6)
  50.     move.w    #16/2,$b4(a6)
  51.     move.w    #clock/(16*880),$b6(a6)
  52.  
  53.     move.l    #modvol,$a0(a6)
  54.     move.w    #(modvol_end-modvol)/2,$a4(a6)
  55.     move.w    #clock/(modvol_end-modvol),$a6(a6)
  56.  
  57.     move.w    #$8001,$9e(a6)        ;imposta USE0V1
  58.  
  59.     move.w    #$8003,$96(a6)        ;accende AUD0 e AUD1 in DMACON
  60.  
  61. WLMB:    btst    #6,$bfe001        ;aspetta il pulsante sinistro del mouse
  62.     bne.s    WLMB
  63.  
  64.     move.w    #$0001,$9e(a6)        ;spegne USE0V1
  65.     or.w    #$8000,d6        ;accende il bit 15 (SET/CLR)
  66.     move.w    d6,$9e(a6)        ;reimposta ADKCON dell'OS
  67.     move.w    #$0003,$96(a6)        ;spegne AUD0 e AUD1
  68.     or.w    #$8000,d7        ;accende il bit 15 (SET/CLR)
  69.     move.w    d7,$96(a6)        ;reimposta DMA dell'OS
  70.     move.l    4.w,a6
  71.     jsr    _LVOEnable(a6)
  72.     rts
  73.  
  74.     SECTION    Sample,DATA_C    ;venendo letta dal DMA deve essere in CHIP
  75.  
  76. Armonica:    ;armonica di 16 valori creata col'IC del trash'm-one
  77.     DC.B    $19,$46,$69,$7C,$7D,$6A,$47,$1A,$E8,$BB,$97,$84,$83,$95,$B8,$E5
  78. ModVol:
  79.     blk.w    65*2
  80. ModVol_end:
  81.     END
  82.  
  83.  
  84. Molto semplicemente, abbiamo innanzitutto generato una tabella di 130 valori
  85. da 0 a 64 e da 64 a 0 per i volumi dell'AUD1VOL, che abbiamo fatto leggere al
  86. canale 0, mentre il canale 1 leggeva l'armonica alla frequenza del LA3 (880 Hz
  87. di frequenza d'onda).
  88. Come periodo del canale modulatore abbiamo fatto finta che stesse leggendo un
  89. normale sample e gli abbiamo fornito la velocità di lettura: perchè la tabella
  90. venga tutta letta in 1 secondo il periodo di campionamento deve essere pari
  91. alla costante di clock divisa per la lunghezza in byte della tabella = 1 Hz.
  92.  
  93. N.B.:    notate che non è stato impostato il volume del canale 0 (AUD0VOL),
  94.     poichè non è neccessario, in quanto il suo output non viene
  95.     deamplificato (64 = -0 dB) e finisce direttamente nel registro AUD1VOL.
  96.     Nemmeno AUD1VOL è stato impostato all'inizio, poichè viene subito
  97.     modificato dal modulatore.
  98.